/*
 * Created on May 1, 2006
 *
 * Copyright (c) 2005 Peter Johan Salomonsen (http://www.petersalomonsen.com)
 * 
 * http://www.frinika.com
 * 
 * This file is part of Frinika.
 * 
 * Frinika is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.

 * Frinika is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with Frinika; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
package com.petersalomonsen.mediacast.session;

import java.util.Hashtable;
import java.util.Vector;

/**
 * @author Peter Johan Salomonsen
 */
public class CastSession implements CastSessionRemote {
    
    static Hashtable<String,Vector<Fragment>> streams = new Hashtable<String,Vector<Fragment>>();
    static Hashtable<String,byte[]> streamHeaders = new Hashtable<String,byte[]>();
    
    static int BUFFERING_FRAGMENTS = 10;
    
    public void sendHeader(String fileName, byte[] header)
    {
        streamHeaders.put(fileName,header);
    }
    
    public void sendFragment(String fileName, byte[] data) {
        Fragment fragment = new Fragment(data);
    		if(streams.containsKey(fileName))
    		{
    			Vector<Fragment> streamFragments = streams.get(fileName); 
    			streamFragments.lastElement().setNextFragment(fragment);
    			streamFragments.add(fragment);
    			if(streamFragments.size()>=BUFFERING_FRAGMENTS)
    				streamFragments.remove(0);
    		}
    		else
    		{
    			Vector<Fragment> streamFragments = new Vector<Fragment>();
    			streamFragments.add(fragment);
    			streams.put(fileName,streamFragments);
    		}
    }    

    public static Fragment getFragment(String fileName) {
        return streams.get(fileName).firstElement();
    }

    public static byte[] getHeader(String fileName) {
        return streamHeaders.get(fileName);
    }
}
